//WEB统一检验（HTML常用标签版）
var vErrDivObs = new Array();		//存放报提示的DIV（外部程序不需维护该变量）
var vErrMsgForFun = new Array();	//存放自定义方法报的错误，外部程序需要维护的变量

/*
 * 检查的入口方法
 * @param form form标签对象
 * @param strFuns 成功后执行的方法
 */
function doCheck(form,strFuns){
	var vObjs = new Array();	//出错的对象数组
	var vErrMsgs = new Array();	//出错的错误信息数组
	
	var v=form.elements;
	var errMsg = "";
	delErrMsg();
	for (idxD = 0; idxD < v.length; idxD++){		
		if (getCaptionAttribute(v[idxD]) != null && getCaptionAttribute(v[idxD]).indexOf(":") > 0 && v[idxD].disabled != true) {							
			switch (v[idxD].type) {
				case "select-one" : errMsg = splitCaption(v[idxD]) ;break;
				case "select-multiple" : errMsg = splitCaption(v[idxD]) ;break;
				case "textarea" : errMsg = splitCaption(v[idxD]) ;break;
				case "password" : errMsg = splitCaption(v[idxD]) ;break;
				case "text" : errMsg = splitCaption(v[idxD]) ;break;
				case "hidden" : errMsg = splitCaption(v[idxD]) ;break;					
			}
			
			//把错误信息加到数组
			if (errMsg != null && errMsg != "") {
				vErrMsgs[vErrMsgs.length] = errMsg;
				vObjs[vObjs.length] = v[idxD];								
			}
		}
	}
	
	//标志和提示错误信息
	if (vObjs != null && vObjs.length>0){
		var strMsg = "";
		showErrMsg(vObjs,vErrMsgs);
		for (idxD=0; idxD < vErrMsgs.length; idxD++){
			strMsg += vErrMsgs[idxD];
		}		
		alert(strMsg);
		try {
			vObjs[0].focus();
		} catch (e) {
			
		}
		return false;
	}
		
	//执行自定义方法（字符串里可以是多个方法）	
	eval(strFuns);
	vErrMsgForFun.length=0;			//把之前的提示清空
	if (vErrMsgForFun.length>0){	//显示自定义方法报的提示
		strMsg = "";		
		for (idxD=0; idxD < vErrMsgForFun.length; idxD++){
			strMsg += vErrMsgForFun[idxD];
		}		
		alert(strMsg);		
		return false;
	}
	
	return true;
}

function getCaptionAttribute(obj) {
	return obj.getAttribute("caption");
}

/*
 * 显示错误提示信息  
 * @param objs 检查出错误的标签对象
 * @param errMsgs 错误信息
 */
function showErrMsg (objs,errMsgs) {
   var vDiv;
   if (objs != null && objs != "") {
   	for (idxSE = 0; idxSE < objs.length; idxSE++) {
   		vDiv = document.createElement("span");
   		vDiv.name = "checkMsgDiv";
   		vDiv.style.position="absolute";
   		vDiv.innerHTML="<img src='" + contextPath + "/skin/default/images/right/inval_state.gif' alt='" + errMsgs[idxSE] + "'/>";
   		//objs[idxSE].appendChild(vDiv);
   		appendAfter(objs[idxSE], vDiv);
   		vErrDivObs.push(vDiv);			
   	}
   }		  		  		
}        

function appendAfter(obj, vDiv) {
	 if(obj.nextSibling) {
	 	obj.parentNode.insertBefore(vDiv, obj.nextSibling); 
	 } else {
	 	 obj.parentNode.appendChild(vDiv); 
	 }          
}

/*
 * 隐藏错误提示信息
 */
function delErrMsg(){ 	
 	if (vErrDivObs != null && vErrDivObs.length>0){ 		
 		for (idxDE =0; idxDE < vErrDivObs.length; idxDE++){
 			vErrDivObs[idxDE].style.display="none";
 			vErrDivObs[idxDE].innerHTML = "";
 		}
	}	
}

/*
 * 分解CAPTION的定义，并调用相应的检验方法
 * @param obj 标签对象
 */
function splitCaption (obj) {
	var params = new Array();		//记录在caption是否有'/;','/:','//'的转义符
	var vcaption = getCaptionAttribute(obj);		//caption值
	var items;						//按';'截取后的属性项
	var proterty;	
	
	var cname = "";					//控件别名
	var type = "";					//输入值类型
	var format = "";				//格式，暂时只使用于string和date类型
	
	var errMsg = "";				//错误信息(检查不通过的错误信息)
	
	var existsAllowlrspace = false;	//判断是否存在allowlrspace属性(字符串的左右是否允许存在空格), 默认是不存在的！
	
	//记录被转义的'//'':'';'符号
	if (vcaption.indexOf("//") > 0){
	
		params[params.length] = "/";
		vcaption = vcaption.replace("//","&params["+ (params.length-1) + "]");
	}
	if (vcaption.indexOf("/;") > 0){
		params[params.length] = ";";
		vcaption = vcaption.replace("/;","&params["+ (params.length-1) + "]");
	}
	if (vcaption.indexOf("/:") > 0){
		params[params.length] = ":";
		vcaption = vcaption.replace("/:","&params["+ (params.length-1) + "]");	
	}
	items = vcaption.split(";");		//取出所有属性
	
	
	//取别名和类型
	for (idxS = 0; idxS < items.length; idxS++) {					//取值类型别名
		proterty = null;
		proterty = items[idxS].split(":");							//把属性的KEY和值分开
		proterty[0] = proterty[0].replace(" ","").toLowerCase();	//取掉KEY里的空格,并转成小写
				
		if (proterty != null && proterty.length == 2) {
			if (proterty[0] == "cname"){							//取别名
				cname = proterty[1];
				cname = returnTransSign (params,cname);				//把转义符号转回实际符号
			}
			
			
			if (proterty[0] == "type"){						//取类型
				type = proterty[1];
				type = returnTransSign (params,type);		//把转义符号转回实际符号
			}
			
			if (proterty[0] == "format"){					//取格式
				format = proterty[1];
				format = returnTransSign (params,format);	//把转义符号转回实际符号
			}
			
			if (proterty[0] == "allowlrspace"){				//是否存在allowlrspace：前后是否允许出现空格
				existsAllowlrspace = true;
			}
			
			if (cname != null && cname != "" && type != null && type != "" && format != null && format != "")		
				break;
		}
	}
	
	//若不存在allowlrspace的属性则加上一个默认的allowspace:false,表示前后不允许出现空格
	//对于select类型、textarea类型、password类型和hidden类型默认不加上这个限制！
	//只针对text类型默认加上这个限制！
	if (existsAllowlrspace == false && obj.type == 'text') {
		items[items.length] = "allowlrspace:false";
	}
	
	//如果空值或没有定义类型，则返回				
	if (cname == null || cname == "")	//如果定义CAPTION时没有输入别名，则取控件的NAME属性
		cname = obj.name;
	if (cname == null || cname == "")	//如果定义CAPTION时没有输入别名，则取控件的ID属性
		cname = obj.id;
	
	//取各种属性
	for (idxS2 = 0; idxS2 < items.length; idxS2++) {
		proterty = null;
		proterty = items[idxS2].split(":");							//把属性的KEY和值分开
		proterty[0] = proterty[0].replace(" ","").toLowerCase();	//取掉KEY里的空格,并转成小写
		if (proterty != null && proterty.length == 2) {
			proterty[1] = returnTransSign (params,proterty[1]);		//把转义符号转回实际符号
			switch (proterty[0]) {
				case "type" : errMsg = checkType(obj,cname,type,format); break;					//检查类型
				case "minlen" : errMsg = checkMinLen(obj,cname,proterty[1]); break;				//检查最小长度
				case "maxlen" : errMsg = checkMaxLen(obj,cname,proterty[1]); break;				//检查最大长度
				case "minval" : errMsg = checkMinVal(obj,cname,type,proterty[1]); break;		//检查最小值
				case "maxval" : errMsg = checkMaxVal(obj,cname,type,proterty[1]); break;		//检查最大值
				case "isnull" : errMsg = checkIsNull(obj,cname,proterty[1]); break;				//检查能否为空					
				case "exp" : errMsg = execRegExp(obj,cname,proterty[1]); break;					//执行表达式
				case "include" : errMsg = checkInclude(obj,cname,type,proterty[1]); break;		//检查包含字符定义的字符或字符串（只需要含有1~多个）
				case "includeall" : errMsg = checkIncludeAll(obj,cname,type,proterty[1]); break;		//检查包含字符定义的字符或字符串（必须含有定义的所有字符或字符串）
				case "uninclude" : errMsg = checkUninclude(obj,cname,type,proterty[1]); break;			//检查不包含字符定义的字符或字符串（必须不含有定义的所有字符或字符串）					
				case "allowlrspace" : errMsg = checkAllowLRSpace(obj,cname,type,proterty[1]); break;  	//检查字符串前后是否允许存在空格
				case "ajaxvalidate": errMsg = checkAjax(obj,cname,proterty[1]); break;					//检查AJAX验证结果
			}
			
			if (errMsg != null && errMsg != "")	//如果检验出错误，则返回
				return errMsg;
					
		}
	}
	return errMsg;
}	


/*
 * 把转义符号转回实际符号
 * @param signParams 转义符号数组
 * @param str 字符串
 */
function returnTransSign (signParams,str) {
	var tmpStr = str;		
	for (idxR = 0; idxR < signParams.length; idxR++) {	//把转义符号转回正式符号
		tmpStr = tmpStr.replace("&params[" + (idxR) + "]",signParams[idxR]);
	}
	return tmpStr;
}

/*
 * 检查字符串前后是否允许存在空格
 * @param obj	标签对象
 * @param cname 标签别名
 * @param type  标签类型
 * @param propertyVal 检验标准（false:不允许前后有空格）
 */
function checkAllowLRSpace(obj, cname, type, propertyVal) {
	if (propertyVal == 'false') { //不允许前后出现空格
		if (/^\s+.*[^\s+]$/.test(obj.value)) {
			return cname + "： 前面不能存在空格!\n";
		} else if (/^[^\s+].*\s+$/.test(obj.value)) {
			return cname + "： 后面不能存在空格!\n";
		} else if (/^\s+.*\s+$/.test(obj.value)) {
			return cname + "： 前面和后面都不能存在空格!\n";
		}
	}
}

/*
 * 检查包含字符（需要包含定义字符中的1~N个）
 * @param obj	标签对象
 * @param cname 标签别名
 * @param type  标签类型
 * @param propertyVal 检验标准
 */
function checkInclude (obj,cname,type,propertyVal) {
	if (type == "int" || type == "float" || propertyVal == null || propertyVal == ""
		|| obj.value == null || obj.value == "")	//如果是整型或浮点型，则不需要检查
		return "";
	
	vProVal = propertyVal;
	var params = new Array();
	vValue = obj.value;
	
	//记录被转义的','符号
	if (vProVal.indexOf("//") > 0){
	
		params[params.length] = "/";
		vProVal = vProVal.replace("//","&params["+ (params.length-1) + "]");
	}
	if (vProVal.indexOf("/,") > 0){
	
		params[params.length] = ",";
		vProVal = vProVal.replace("/,","&params["+ (params.length-1) + "]");
	}
	
	var proValItems = vProVal.split(",");
	if (proValItems != null ) {
		for (idxC = 0; idxC < proValItems.length; idxC++) {						
			if (vValue.indexOf(returnTransSign(params,proValItems[idxC])) > -1) 
				return "";					
		}			
	}
	
	return cname + "： 必须包含字符 " + propertyVal.replace("/,",",") + " 其中一项!\n";		
}


/*
 * 检查包含字符（需要包含定义字符中的所有字符）
 * @param obj	标签对象
 * @param cname 标签别名
 * @param type  标签类型
 * @param propertyVal 检验标准
 */
function checkIncludeAll (obj,cname,type,propertyVal) {
	if (type == "int" || type == "float" || propertyVal == null || propertyVal == ""
		|| obj.value == null || obj.value == "")	//如果是整型或浮点型，则不需要检查
		return "";
	
	vProVal = propertyVal;
	var params = new Array();
	vValue = obj.value;
	
	//记录被转义的','符号
	if (vProVal.indexOf("//") > 0){
	
		params[params.length] = "/";
		vProVal = vProVal.replace("//","&params["+ (params.length-1) + "]");
	}
	if (vProVal.indexOf("/,") > 0){
	
		params[params.length] = ",";
		vProVal = vProVal.replace("/,","&params["+ (params.length-1) + "]");
	}
	
	var proValItems = vProVal.split(",");
	if (proValItems != null ) {
		for (idxC = 0; idxC < proValItems.length; idxC++) {						
			if (vValue.indexOf(returnTransSign(params,proValItems[idxC])) < 0) 
				return cname + "： 必须包含字符 " + propertyVal.replace("/,",",") + " 的所有字符!\n";					
		}			
	}			
}

/*
 * 检查不能包含的字符（不能包含所定义的字符）
 * @param obj	标签对象
 * @param cname 标签别名
 * @param type  标签类型
 * @param propertyVal 检验标准
 */
function checkUninclude (obj,cname,type,propertyVal) {
	if (type == "int" || type == "float" || propertyVal == null || propertyVal == ""
		|| obj.value == null || obj.value == "")	//如果是整型或浮点型，则不需要检查
		return "";
	
	vProVal = propertyVal;
	var params = new Array();
	vValue = obj.value;
	
	//记录被转义的','符号
	if (vProVal.indexOf("//") > 0){
	
		params[params.length] = "/";
		vProVal = vProVal.replace("//","&params["+ (params.length-1) + "]");
	}
	if (vProVal.indexOf("/,") > 0){
	
		params[params.length] = ",";
		vProVal = vProVal.replace("/,","&params["+ (params.length-1) + "]");
	}
	
	var proValItems = vProVal.split(",");
	if (proValItems != null ) {
		for (idxC = 0; idxC < proValItems.length; idxC++) {						
			if (vValue.indexOf(returnTransSign(params,proValItems[idxC])) > 0) 
				return cname + "： 不能包含 " + propertyVal.replace("/,",",") + " 的字符!\n";					
		}			
	}			
}


/*
 * 检查最小长度
 * @param obj	标签对象
 * @param cname 标签别名
 * @param type  标签类型
 * @param propertyVal 检验标准
 */
function checkMinLen (obj,cname,propertyVal) {
 	if (obj.value == null || obj.value == "")
	 	return "";
	 	
	var re = /^[1-9]\d*$/;
	var val = obj.value;
	
	if (re.test(propertyVal)) {				
		if (val.replace(/[^\x00-\xff]/g,"xx").length < propertyVal)
			return cname + "： 输入的值小于最小长度 " + propertyVal + "!\n";
	}
	return "";		
}


/*
 * 检查最大长度
 * @param obj	标签对象
 * @param cname 标签别名
 * @param type  标签类型
 * @param propertyVal 检验标准
 */
function checkMaxLen (obj,cname,propertyVal) {
	if (obj.value == null || obj.value == "")
	 	return "";
	 	
	var re = /^[1-9]\d*$/;
	var val = obj.value;

	if (re.test(propertyVal)) {		
		if (val.replace(/[^\x00-\xff]/g,"xx").length > propertyVal)
			return cname + "： 输入的值超出最大长度 " + propertyVal + "!\n";
	}
	return "";	
}


/*
 * 检查最小值
 * @param obj	标签对象
 * @param cname 标签别名
 * @param type  标签类型
 * @param propertyVal 检验标准
 */
function checkMinVal(obj,cname,type,propertyVal) {
	if (obj.value == null || obj.value == "" || (type != "float" && type != "int" && type != "number"))
	 	return "";
	 	
	var re = /^[1-9]\d*$|^[1-9]\d*.[1-9]\d*$/;
	var val = obj.value;
	
	if (re.test(propertyVal)) {
		var vNum = new Number(obj.value);
		var pNum = new Number(propertyVal);			
		if (vNum < pNum)		
			return cname + "： 输入的值小于最小值 " + propertyVal + "!\n";
	}
}


/*
 * 检查最大值
 * @param obj	标签对象
 * @param cname 标签别名
 * @param type  标签类型
 * @param propertyVal 检验标准
 */
function checkMaxVal(obj,cname,type,propertyVal) {
	if (obj.value == null || obj.value == "" || (type != "float" && type != "int" && type != "number"))
	 	return "";
	 	
	var re = /^[1-9]\d*$|^[1-9]\d*.[1-9]\d*$/;
	var val = obj.value;		
	if (re.test(propertyVal)) {	
		var vNum = new Number(obj.value);
		var pNum = new Number(propertyVal);			
		if (vNum > pNum)			
			return cname + "： 输入的值大于最大值 " + propertyVal + "!\n";
	}
}


/*
 * 执行用户自定义表达式
 * @param obj	标签对象
 * @param cname 标签别名
 * @param propertyVal 检验标准
 */
function execRegExp(obj,cname,propertyVal){
	//如果空值或没有定义类型，则返回
	if (obj.value == null || obj.value == "")
	 	return "";
	 	
	try{
		var re = new RegExp (propertyVal);
		if (!re.test(obj.value))
			return cname + "： 不符合自定义表达式的条件!表达式:" + re +"\n";
	} catch(E){
		return cname + " 中的自定义表达式格式错误!" + E + "\n";
	}
	return "";
}


/*
 * 检查是否为空
 * @param obj	标签对象
 * @param cname 标签别名
 * @param propertyVal 检验标准
 */
function checkIsNull (obj,cname,propertyVal){
	//如果空值或没有定义类型，则返回		
	var vName = cname;
	if (vName == null || vName == "")	//如果定义CAPTION时没有输入别名，则取控件的NAME属性
		vName = obj.name;
	if (vName == null || vName == "")	//如果定义CAPTION时没有输入别名，则取控件的ID属性
		vName = obj.id;
		
	if (propertyVal == "false")	
		if (obj.value == null || obj.value == "")
			return vName + "： 不能为空!\n";

	return "";
}


/*
 * 检查类型
 * @param obj	标签对象
 * @param cname 标签别名
 * @param type 类型
 * @param propertyVal 检验标准
 */
function checkType (obj,cname,type,format) {
	var errMsg = "";
	var vformat = format;
	var textVal = obj.value;
	var re = null;
	//如果空值或没有定义类型，则返回
	if (textVal == null || textVal == "" || type == null || type == "")
	 	return errMsg;
	 	
	var vName = cname;
	if (vName == null || vName == "")	//如果定义CAPTION时没有输入别名，则取控件的NAME属性
		vName = obj.name;
	if (vName == null || vName == "")	//如果定义CAPTION时没有输入别名，则取控件的ID属性
		vName = obj.id;
		
	
	
	switch (type){
		case "string" : break;
		case "int" : 
			re = /^-?[0-9]\d*$/; 
			if (!re.test(textVal)) errMsg= vName + "： 必须是整型数字！\n"; 
			break;	//检查整型
		case "float" :
			if (!checkFloatType(textVal,vformat)){
				if (vformat != null && vformat != "") errMsg= vName + "： 必须是浮点型数字,且保留 " + vformat + " 位小数！\n";
				else errMsg= vName + "： 必须是浮点型数字！\n"; 
			}
			break;	//检查浮点型		
		case "date" : 		//检验日期（以定义的格式来检验），不定义格式时默认为YYYY-MM-DD HH24:MI:SS
			if (vformat == null || vformat == "") vformat="YYYY-MM-DD HH24:MI:SS"; 
			if (!checkDateType(textVal,vformat)) errMsg= vName + "： 必须是日期型，且格式为 " + vformat + "！\n"; 
			break;	
		case "e-mail" : 
			re=/\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*/; 
			if (!re.test(textVal)) errMsg= vName + "： 必须是Email地址格式(如xxx@xxx.com)！\n"; 
			break;	//检查EMAIL
		case "phone" : 
			re = /^\d{7}$|^\d{8}$|^\d{11}$/; 
			if (!re.test(textVal)) errMsg= vName + "： 必须是电话号码格式！\n"; 
			break;	//检查电话号码
		case "url " : 
			re =/^[a-zA-z]+:\/\/[^\s]*\.[^\s]*$/;
			if (!re.test(textVal)) {errMsg= vName + "： 必须是网络url格式(如http://xxx.com)！\n"}; 
			break;
		case "ip" : 
			re = /^(22[0-3]|2[0-1][0-9]|(1[0-9]|[1-9])[0-9]|[1-9])\.(25[0-5]|2[0-4][0-9]|(1[0-9]|[1-9])[0-9]|[0-9])\.(25[0-5]|2[0-4][0-9]|(1[0-9]|[1-9])[0-9]|[0-9])\.(25[0-4]|2[0-4][0-9]|(1[0-9]|[1-9])[0-9]|[0-9])$/;
			//re = /^(25[0-5]|2[0-4][0-9]|(1[0-9]|[1-9])?[1-9])\.(25[0-5]|2[0-4][0-9]|(1[0-9]|[1-9])?[0-9])\.(25[0-5]|2[0-4][0-9]|(1[0-9]|[1-9])?[0-9])\.(25[0-5]|2[0-4][0-9]|(1[0-9]|[1-9])?[0-9])$/;
			// re = /^(([1-9])|[1-9][0-9]|([1][0-9][0-9]|[2][0-5][0-5]))\.([0-9]|[1-9][0-9]|([0-1][0-9][0-9]|[0-2][0-5][0-5]))\.([0-9]|[1-9][0-9]|([0-1][0-9][0-9]|[0-2][0-5][0-5]))\.([0-9]|[1-9][0-9]|([0-1][0-9][0-9]|[0-2][0-5][0-5]))$/;
			if (!re.test(textVal)) errMsg= vName + "： 必须是IP地址格式(如1.0.0.0~255.255.255.255)！\n"; 
			break;  //检查IP	
		case "en" : 
			if (vformat == null || vformat == "") vformat = "none";			
			if (!checkEnType(textVal,vformat)) {
				if (vformat == "none")
					errMsg= vName + "： 必须是英文字符！\n";
				else if ((vformat == "upper"))
					errMsg= vName + "： 必须是英文大写字符！\n";
				else if ((vformat == "lower"))
					errMsg= vName + "： 必须是英文小写字符！\n";	
			}
			break;  //检查英文字符	
		case "cn" : 
			re = /[\u4e00-\u9fa5]$/;
			if (!re.test(textVal)) errMsg= vName + "： 必须是汉字！\n"; 
			break;  //检查中文字符	
		case "print" :
			re = /[^\t\n\r\f\v]$/;
			if (!re.test(textVal)) errMsg= vName + "： 必须是可打印字符！\n"; 
			break;  //检查可打印字符
		case "unprint" :
			re = /[^\t\n\r\f\v]$/;
			if (re.test(textVal)) errMsg= vName + "： 必须是非可打印字符！\n"; 
			break;  //检查非可打印字符	
		case "number" :
			re = /(^-?[0-9]\d*$)|(^-?([1-9]\d*\.\d*|0\.\d*[1-9]\d*|0?\.0+|0)$)/;
			
			if (!re.test(textVal)) errMsg= vName + "： 必须是数字类型！\n"; 
			break;  //检查数字类型	
		case "boolean" :
			re = /^true|TRUE|false|FALSE$/;
			if (!re.test(textVal)) errMsg= vName + "： 必须是布尔类型！\n"; 
			break;
	}		
	
	return errMsg;
}


/*
 * 检查英文字符
 * @param textVal	被检验的值
 * @param format 检验标准
 */
function checkEnType (textVal, format){
	var re;
	if (format != null) {
		switch(format) {
			case "lower" : re = /^[a-z]+$/; return re.test(textVal);
			case "upper" : re = /^[A-Z]+$/; return re.test(textVal);
			default : re = /^[A-Za-z]+$/; return re.test(textVal);
		} 
	}	
	return true;
}


/*
 * 检查日期类型的方法
 * @param textVal	被检验的值
 * @param format 检验标准
 */
function checkDateType (textVal, format) {
	
	var tmpFormat = format.toUpperCase();
	//拼正侧表达式
	var strExp = (tmpFormat).replace("DD","(\\d{1,2})");
	if (tmpFormat.indexOf('YYYY') > -1)
		strExp = strExp.replace("YYYY","(\\d{4})");
	else 
		strExp = strExp.replace("YY","(\\d{2})");
	strExp = strExp.replace("MM","(\\d{1,2})");		
	strExp = strExp.replace("HH24","(\\d{1,2})");
	strExp = strExp.replace("MI","(\\d{1,2})");
	strExp = strExp.replace("SS","(\\d{1,2})");		
	strExp = "^" + strExp + "$";
	var re = new RegExp(strExp);	//实例化成表达式
	var ar = textVal.match(re);  	//通过表达式分解出
	var ar2 = new Array();
	var seq = new Array();
	var seq2 = new Array();
	
	if(ar == null)
		return false;

	seq[0] = tmpFormat.indexOf("YY");
	seq[1] = tmpFormat.indexOf("MM");
	seq[2] = tmpFormat.indexOf("DD");			
	seq[3] = tmpFormat.indexOf("HH24");					
	seq[4] = tmpFormat.indexOf("MI");							
	seq[5] = tmpFormat.indexOf("SS");		
	
	var tmp = "";
	for (idxC = 0; idxC < seq.length; idxC++){	//为日期各项排序，循序为YYYY，MM，DD，HH24，MI，SS
		seq2[idxC] = 0;
		for (idxC2 = 0; idxC2 < seq.length; idxC2++) {
			
			if (seq[idxC] == -1)
				seq2[idxC] = -1;
			else if (idxC != idxC2 && seq[idxC2] > -1 && seq[idxC] > seq[idxC2])
				seq2[idxC] ++; 													
		}
	}
	
	for (idx3 = 0; idx3 < seq2.length; idx3++) {
		if (seq2[idx3] == -1)
			ar2[idx3] = 0;
		else if (seq2[idx3] > -1)
			ar2[idx3] = ar[seq2[idx3]+1];
	}
	var d = new Date (ar2[0],ar2[1]-1,ar2[2],ar2[3],ar2[4],ar2[5]);
			
	if(tmpFormat.indexOf("YYYY") > -1 && d.getFullYear()!=ar2[0])return false;  
	if(tmpFormat.indexOf("YY") > -1 && d.getYear()!=ar2[0])return false;  		
	if(tmpFormat.indexOf("MM") > -1 && d.getMonth()!=ar2[1]-1)return false;  
	if(tmpFormat.indexOf("DD") > -1 && d.getDate()!=ar2[2])return false;  
	if(tmpFormat.indexOf("HH24") > -1 && d.getHours()!=ar2[3])return false;  
	if(tmpFormat.indexOf("MI") > -1 && d.getMinutes()!=ar2[4])return false;  
	if(tmpFormat.indexOf("SS") > -1 && d.getSeconds()!=ar2[5])return false;  					
		
	return true;
}



/*
 * 检查浮点数及其精度
 * @param textVal	被检验的值
 * @param format 检验标准
 */
function checkFloatType(textVal, format){
	var exp ;
	var re = /^[1-9]\d*|0$/;
	if (format == null || !re.test(format))			
		exp = "^-?([1-9]\\d*\\.\\d*|0\\.\\d*[1-9]\\d*|0?\\.0+|0)$";
	else {
		re = /^[1-9]\d*$/;
		if (re.test(format))
			exp = "^(\\d+)\\.(\\d{" + format + "})$|^(-\\d+)\\.(\\d{" + format + "})$";
		else if (format == "0") {
			exp = "^([0-9]\\d*|-[1-9]\\d*)$";			
		}
	}
	re = new RegExp(exp);
	if (!re.test(textVal)) 
		return false;
	return true;
}


/*
 * 检查是否进行ajax检验
 * @param obj	对象
 * @param cname 别名
 * @param propertyVal 属性值
 */
function checkAjax (obj,cname,propertyVal){
	//如果空值或没有定义类型，则返回		
	var vName = cname;
	if (vName == null || vName == "")	//如果定义CAPTION时没有输入别名，则取控件的NAME属性
		vName = obj.name;
	if (vName == null || vName == "")	//如果定义CAPTION时没有输入别名，则取控件的ID属性
		vName = obj.id;
	
	var resultMsg="";
	if (propertyVal == "true") {
		resultMsg = getObjStateMsg(obj.name);
		if (resultMsg != "true" && resultMsg != "")
			return vName + "：" + resultMsg + "!\n";
	}

	return "";
}

